const express = require("express")
const router = express.Router()
const shareDB = require("../../../db/share")
const { join } = require("path")
const multer = require("multer")
const path = require("path")
const fs = require("fs")
const { sensitiveVer } = require('../../../utils/sensitiveVerification')

// 权限鉴别
router.use((req, res, next) => {
  if (!req.session.userInfo?.allowUpdate) {
    return res.send({
      code: 15,
      mes: "您没有修改权限，请联系超级管理员进行添加"
    })
  }
  next()
})


// 上传md文件
let mdUpload = multer({
  storage: multer.diskStorage({
    // 文件存储的目录
    destination(req, file, cb) {
      cb(null, join(__dirname, "../../../static/share/md"))
    },
    // 文件的名字
    filename(req, file, cb) {
      let name = req.session.userInfo._id
      let ext = path.extname(file.originalname)
      req.coverFile = "share" + name + Date.now() + ext
      cb(null, req.coverFile)  //名字
    }
  })
}).single("file") //name名字 elemetUI默认为file

// 上传cover文件
let coverUpload = multer({
  storage: multer.diskStorage({
    // 文件存储的目录
    destination(req, file, cb) {
      cb(null, join(__dirname, "../../../static/share/cover"))
    },
    // 文件的名字
    filename(req, file, cb) {
      let name = req.session.userInfo._id
      let ext = path.extname(file.originalname)
      req.coverFile = "share" + name + Date.now() + ext
      cb(null, req.coverFile)  //名字
    }
  })
}).single("file") //name名字 elemetUI默认为file


// 上传md文件
router.post("/md", async (req, res) => {
  try {
    mdUpload(req, res, async err => {
      let id = req.body._id
      if (err) {
        return res.send({
          code: 8,
          mes: "md文件上传失败,请刷新后重试"
        })
      }
      // 检测该分享否存在
      let doc = await shareDB.findById(id)
      if (!doc) {
        return res.send({
          code: 17,
          mes: "该文章已被删除，请刷新后重试"
        })
      }
      // 删除旧的文件
      fs.rm(join(__dirname, "../../../static" + doc.md),
        { recursive: true }, err => {
          if (err) return
        })
      // 修改数据库
      await shareDB.findByIdAndUpdate(id, {
        md: "/share/md/" + req.coverFile,
        mtime: Date.now()
      })
      res.send({
        code: 0,
        mes: "md文件更新成功"
      })
    })
  } catch (error) {
    console.log(error)
    res.send({
      code: 5,
      mes: "服务器异常，请稍后再试"
    })
  }
})

// 上传cover文件
router.post("/cover", async (req, res) => {
  try {
    coverUpload(req, res, async err => {
      if (err) {
        return res.send({
          code: 8,
          mes: "md文件上传失败,请刷新后重试"
        })
      }
      let id = req.body._id
      // 检测文章是否存在
      let doc = await shareDB.findById(id)
      if (!doc) {
        return res.send({
          code: 17,
          mes: "该文章已被删除，请刷新后重试"
        })
      }
      // 删除旧文件
      doc.cover.forEach(item => {
        fs.rm(join(__dirname, "../../../static" + item), { recursive: true }, err => {
          if (err) return
        })
      })
      // 更改数据库 删除
      await shareDB.findByIdAndUpdate(id, {
        $pop: {
          cover: -1
        }
      })
      // 更新数据库 添加
      await shareDB.findByIdAndUpdate(id, {
        $push: {
          cover: "/share/cover/" + req.coverFile
        }
      })
      res.send({
        code: 0,
        mes: "cover文件更新成功",
      })
    })
  } catch (error) {
    console.log(error)
    res.send({
      code: 5,
      mes: "服务器异常，请稍后再试"
    })
  }
})


// 修改其他 标题 文字
router.post("/updateTit", async (req, res) => {
  try {
    let { title, des, _id } = req.body
    // 检测文章是否存在
    let doc = await shareDB.findById(_id)
    if (!doc) {
      return res.send({
        code: 17,
        mes: "该文章已被删除，请稍后再试"
      })
    }

    await sensitiveVer(title)
    await sensitiveVer(des)

    // 更改数据库
    await shareDB.findByIdAndUpdate(_id, {
      title,
      des,
      mtime: Date.now()
    })
    res.send({
      code: 0,
      mes: "文章更新成功"
    })
  } catch (error) {
    res.send({
      code: 5,
      mes: "服务器异常，请稍后再试"
    })
  }
})



module.exports = router